// HTTP模块中文封装
const http = require('http');
const https = require('https');

/**
 * 创建HTTP服务器
 * @param {Function} 请求处理函数 - 处理请求的回调函数 (请求, 响应) => {}
 * @returns {http.Server} HTTP服务器实例
 */
function 创建HTTP服务器(请求处理函数) {
  return http.createServer(请求处理函数);
}

/**
 * 创建HTTPS服务器
 * @param {Object} 选项 - HTTPS选项对象，包含证书等信息
 * @param {Function} 请求处理函数 - 处理请求的回调函数 (请求, 响应) => {}
 * @returns {https.Server} HTTPS服务器实例
 */
function 创建HTTPS服务器(选项, 请求处理函数) {
  return https.createServer(选项, 请求处理函数);
}

/**
 * 发送HTTP请求
 * @param {Object|string} 选项 - 请求选项或URL字符串
 * @param {Function} 回调函数 - 响应回调函数 (响应) => {}
 * @returns {http.ClientRequest} 客户端请求实例
 */
function 发送HTTP请求(选项, 回调函数) {
  return http.request(选项, 回调函数);
}

/**
 * 发送HTTPS请求
 * @param {Object|string} 选项 - 请求选项或URL字符串
 * @param {Function} 回调函数 - 响应回调函数 (响应) => {}
 * @returns {https.ClientRequest} 客户端请求实例
 */
function 发送HTTPS请求(选项, 回调函数) {
  return https.request(选项, 回调函数);
}

/**
 * 发送GET请求
 * @param {Object|string} 选项 - 请求选项或URL字符串
 * @param {Function} 回调函数 - 响应回调函数 (响应) => {}
 * @returns {http.ClientRequest} 客户端请求实例
 */
function 发送GET请求(选项, 回调函数) {
  return http.get(选项, 回调函数);
}

/**
 * 发送HTTPS GET请求
 * @param {Object|string} 选项 - 请求选项或URL字符串
 * @param {Function} 回调函数 - 响应回调函数 (响应) => {}
 * @returns {https.ClientRequest} 客户端请求实例
 */
function 发送HTTPSGET请求(选项, 回调函数) {
  return https.get(选项, 回调函数);
}

/**
 * 设置HTTP响应头
 * @param {http.ServerResponse} 响应对象 - 服务器响应对象
 * @param {string} 头名称 - 响应头名称
 * @param {string} 头值 - 响应头值
 */
function 设置响应头(响应对象, 头名称, 头值) {
 响应对象.setHeader(头名称, 头值);
}

/**
 * 写入HTTP响应状态码
 * @param {http.ServerResponse} 响应对象 - 服务器响应对象
 * @param {number} 状态码 - HTTP状态码
 * @param {string} 状态消息 - 可选的状态消息
 */
function 写入状态码(响应对象, 状态码, 状态消息) {
 响应对象.writeHead(状态码, 状态消息);
}

/**
 * 向HTTP响应写入数据
 * @param {http.ServerResponse} 响应对象 - 服务器响应对象
 * @param {string|Buffer} 数据 - 要写入的数据
 * @param {Object} 选项 - 可选的写入选项
 */
function 写入响应数据(响应对象, 数据, 选项) {
 响应对象.write(数据, 选项);
}

/**
 * 结束HTTP响应
 * @param {http.ServerResponse} 响应对象 - 服务器响应对象
 * @param {string|Buffer} 数据 - 可选的最后写入的数据
 * @param {Object} 选项 - 可选的写入选项
 */
function 结束响应(响应对象, 数据, 选项) {
 响应对象.end(data, options);
}

/**
 * 监听服务器端口
 * @param {http.Server|https.Server} 服务器 - HTTP或HTTPS服务器实例
 * @param {number} 端口 - 要监听的端口号
 * @param {string} 主机名 - 可选的主机名
 * @param {Function} 回调函数 - 服务器启动后的回调函数
 */
function 监听端口(服务器, 端口, 主机名, 回调函数) {
  return server.listen(端口, 主机名, 回调函数);
}

/**
 * 停止服务器监听
 * @param {http.Server|https.Server} 服务器 - HTTP或HTTPS服务器实例
 * @param {Function} 回调函数 - 服务器关闭后的回调函数
 */
function 关闭服务器(服务器, 回调函数) {
  return server.close(回调函数);
}

/**
 * 从请求中获取URL查询参数
 * @param {http.IncomingMessage} 请求对象 - 客户端请求对象
 * @returns {Object} 查询参数对象
 */
function 获取查询参数(请求对象) {
  const url = require('url');
  const queryString = require('querystring');
  const parsedUrl = url.parse(请求对象.url);
  return queryString.parse(parsedUrl.query);
}

/**
 * 获取请求方法
 * @param {http.IncomingMessage} 请求对象 - 客户端请求对象
 * @returns {string} HTTP方法（GET, POST等）
 */
function 获取请求方法(请求对象) {
  return 请求对象.method;
}

/**
 * 获取请求URL
 * @param {http.IncomingMessage} 请求对象 - 客户端请求对象
 * @returns {string} 请求URL
 */
function 获取请求URL(请求对象) {
  return 请求对象.url;
}

/**
 * 获取请求头
 * @param {http.IncomingMessage} 请求对象 - 客户端请求对象
 * @param {string} 头名称 - 可选的头名称
 * @returns {Object|string} 所有头信息或指定头的值
 */
function 获取请求头(请求对象, 头名称) {
  if (头名称) {
    return 请求对象.headers[头名称.toLowerCase()];
  }
  return 请求对象.headers;
}

module.exports = {
  创建HTTP服务器,
  创建HTTPS服务器,
  发送HTTP请求,
  发送HTTPS请求,
  发送GET请求,
  发送HTTPSGET请求,
  设置响应头,
  写入状态码,
  写入响应数据,
  结束响应,
  监听端口,
  关闭服务器,
  获取查询参数,
  获取请求方法,
  获取请求URL,
  获取请求头
};